/**
 * ━━━━━━神兽出没━━━━━━
 * 　　　┏┓　　　┏┓
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　　　　　┃
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　┃
 * 　　┃　　　　　　　┃
 * 　　┃　　　┻　　　┃
 * 　　┃　　　　　　　┃
 * 　　┗━┓　　　┏━┛
 * 　　　　┃　　　┃神兽保佑, 永无BUG!
 * 　　　　┃　　　┃Code is far away from bug with the animal protecting
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ━━━━━━感觉萌萌哒━━━━━━
 */
package com.zkgengkun.console.controller;

import com.zkgengkun.domain.User;
import com.zkgengkun.jwt.Jwt;
import com.zkgengkun.support.json.Jacksons;
import com.zkgengkun.support.util.JedisUtil;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author gengshikun
 * @date 2017/8/21
 */
@Controller
@RequestMapping(value = "jwt")
public class JwtController {

    @RequestMapping(value = "auth_login")
    public String aLogin() {

        return "jwt/login";
    }

    @RequestMapping(value = "login")
    @ResponseBody
    public String login(HttpServletRequest request, HttpServletResponse response) {

        // 验证username和password, 登录成功
        Jwt jwt = new Jwt();
        jwt.setUserId("123456");
        jwt.setUsername("shik");
        jwt.setPassword("111111");
        jwt.setExpiresTime(System.currentTimeMillis());
        jwt.setRefreshTime(System.currentTimeMillis());

        User user = new User();
        user.setName("gsk");
        user.setUserId(jwt.getUserId());
        jwt.setUser(user);


        String jwtToken = Jwts.builder()
                .setSubject(Jacksons.json().fromObjectToJson(jwt))
                .signWith(SignatureAlgorithm.HS512, "jwtToken")
                .compact();

        response.addHeader("JWT_TOKEN", jwtToken);

        // 放入 redis
        JedisUtil.getInstance().STRINGS.setEx("jwt_token:"+jwt.getUserId(), 30*24*60*60, jwtToken);

        return "success";
    }

    @RequestMapping(value = "auth/test")
    @ResponseBody
    public String authTest(HttpServletRequest request, HttpServletResponse response) {
        String jwtToken = request.getHeader("JWT_TOKEN");

        String jwtJson = Jwts.parser()
                .setSigningKey("jwtToken")
                .parseClaimsJws(jwtToken)
                .getBody()
                .getSubject();

        Jwt jwt = Jacksons.json().fromJsonToObject(jwtJson, Jwt.class);

        System.out.println(jwt);

        System.out.println("auth success");
        return jwtJson;
    }

}
